home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / cucd / online / fidonetts / 3csrc.lzh / 3viewpkt.c < prev    next >
C/C++ Source or Header  |  1992-05-03  |  6KB  |  265 lines

  1. /*
  2.  * dummied-up type 3 ASCII packet tosser demo
  3.  * displays contents of packet ("SAMPLE.3KT" default) to screen
  4.  * Public Domain
  5.  *
  6.  */
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include "3mail.h"
  12.  
  13.  
  14. /* Return a line from message text -- old, old code, but it works... */
  15.  
  16. char * write_line (char **text, int linelen) {
  17.  
  18.   static char     line[133];
  19.   register int    x = 0;
  20.   char           *p;
  21.   char           *pp;
  22.  
  23.   if (!*text)
  24.     return "";
  25.   if (!**text)
  26.     return *text;
  27.   p = *text;
  28.   pp = line;
  29.   *pp = 0;
  30.   while (++x < (linelen + 1)) {
  31.     switch (*p) {
  32.     case '\r':
  33.       *pp = 0;
  34.       p++;
  35.       goto GotCR;
  36.  
  37.     case '\0':
  38.       goto StopIt;
  39.  
  40.     default:
  41.       *pp = *p;
  42.       pp++;
  43.       p++;
  44.       *pp = 0;
  45.       break;
  46.     }
  47.   }
  48.  
  49. StopIt:
  50.  
  51.   if (*p == ' ') {
  52.     *pp = 0;
  53.     while (*p == ' ')
  54.       p++;
  55.   }
  56.   else if (x == (linelen + 1)) {
  57.     if (strchr (line, ' ')) {
  58.       while (p > *text && *pp != ' ') {
  59.         *pp = 0;
  60.         pp--;
  61.         p--;
  62.       }
  63.       if (p == *text) {
  64.         strncpy (line, *text, linelen + 1);
  65.         line[linelen + 1] = 0;
  66.         p += (linelen + 1);
  67.       }
  68.       else
  69.         p++;
  70.     }
  71.   }
  72.  
  73. GotCR:
  74.  
  75.   while (*pp == ' ' && pp > line) { /* rstrip returned string */
  76.     *pp = 0;
  77.     --pp;
  78.   }
  79.  
  80.   *text = p;
  81.   return line;
  82. }
  83.  
  84.  
  85.  
  86. int import_3msg (void *dummy,PHDR3 *phdr,MHDR3 *mhdr,char *text,
  87.                  int textlen,int *error) {
  88.  
  89.   /* this function is called to import/forward the message
  90.      these dummy functions aren't perfect; will foul up
  91.      screen appearance when long message 'pages' buffer */
  92.  
  93.   static long nummsgs = 0L;
  94.   char       *p,*line,*to;
  95.   TAG3       *info;
  96.  
  97.   *error = NOERR3;
  98.   printf("\n\n ** Message #%ld:\n",++nummsgs);
  99.  
  100.   /* show msg hdr */
  101.  
  102.   if(mhdr->from) printf("\nFrom: %s",mhdr->from);
  103.   else printf("\nNo From; damaged msg");
  104.   to = strdup(mhdr->to);
  105.   if(!to) {
  106.     if(!mhdr->area && !phdr->area) printf("\nNo To, no Area; damaged msg");
  107.     else printf("\nTo:   All");
  108.   }
  109.   else {
  110.     if((p = strchr(to,'@')) != NULL) *p = 0;
  111.     printf("\nTo:   %s",to);
  112.     free(to);
  113.   }
  114.   if(mhdr->date) {
  115.     printf("\nDate: %4.4s/%2.2s/%2.2s %2.2s:%2.2s:%2.2s%s",mhdr->date,
  116.            &mhdr->date[4],&mhdr->date[6],&mhdr->date[8],&mhdr->date[10],
  117.            &mhdr->date[12],&mhdr->date[14]);
  118.   }
  119.   else printf("\nNo date; damaged msg");
  120.   if(mhdr->subj) printf("\nSubj: %s",mhdr->subj);
  121.   if(phdr->area)
  122.     printf("\nArea: %s",phdr->area);
  123.   else if(mhdr->area)
  124.     printf("\nArea: %s",mhdr->area);
  125.   else printf("\n**Netmail");
  126.   if(!mhdr->id) {
  127.     printf("\nNo ID; damaged msg");
  128.   }
  129.   else {
  130.     if(*mhdr->id == ' ') {
  131.       p = strchr(mhdr->from,'@');
  132.       if(p) {
  133.         p++;
  134.       }
  135.       else p = mhdr->from;
  136.       printf("\nID:   %s%s",p,mhdr->id);
  137.     }
  138.     else printf("\nID:   %s",mhdr->id);
  139.   }
  140.   if(mhdr->ref) printf("\nRef:  %s",mhdr->ref);
  141.   printf("\n");
  142.  
  143.   info = mhdr->head;
  144.   while(info) {
  145.     printf("\n");
  146.     if(info->tag) printf("%s",info->tag);
  147.     if(info->data) {
  148.       if(info->tag) printf(" ");
  149.       printf("%s",info->data);
  150.     }
  151.     info = info->next;
  152.   }
  153.   printf("\n");
  154.  
  155.   if(text && textlen) {
  156.     text[textlen] = 0;  /* assure NUL termination */
  157.     p = text;
  158.     while(*p) {
  159.       line = write_line(&p,80);
  160.       fputs(line,stdout);
  161.       if(strlen(line) < 80) fputc('\n',stdout);
  162.     }
  163.   }
  164.  
  165.   return 0;
  166. }
  167.  
  168.  
  169. int appendin_3msg (void *dummy,PHDR3 *phdr,MHDR3 *mhdr,char *text,
  170.                    int textlen,int *error) {
  171.  
  172.   /* this function is called if more than one pass at the message
  173.    * text is required
  174.    */
  175.  
  176.   char *p,*line;
  177.  
  178.   *error = NOERR3;
  179.  
  180.   text[textlen] = 0;  /* assure NUL termination */
  181.   p = text;
  182.   while(*p) {
  183.     line = write_line(&p,80);
  184.     fputs(line,stdout);
  185.     if(strlen(line) < 80) fputc('\n',stdout);
  186.   }
  187.  
  188.   return 0;
  189. }
  190.  
  191.  
  192. int check_3pkthdr (void *dummy,char *fname,PHDR3 *pkt3,int *error) {
  193.  
  194.   /* this "callback" function should check packet header and decide
  195.    * if you want to process the packet.  return 0 if so, anything
  196.    * else if not.
  197.    */
  198.  
  199.   TAG3 *info;
  200.  
  201.   *error = NOERR3;
  202.   if(pkt3->from) printf("\n\n ** Packet \"%s\":\nFrom: %s\n",fname,pkt3->from);
  203.   else printf(" ** Packet \"%s\":\nNo From; damaged packet\n",fname);
  204.   if(pkt3->area) {
  205.     printf("Area: %s\n",pkt3->area);
  206.   }
  207.   if(pkt3->to) {
  208.     printf("To:  %s\n",pkt3->to);
  209.   }
  210.   else {
  211.     if(!pkt3->area) {
  212.       printf("No To, no Area; damaged packet\n");
  213.     }
  214.     else printf("To:   (Broadcast mail)\n");
  215.   }
  216.   if(pkt3->creator) printf("Creator: %s\n",pkt3->creator);
  217.   else printf("No Creator; damaged packet\n");
  218.   if(pkt3->pword) {
  219.     printf("Password: %s\n",pkt3->pword);
  220.   }
  221.  
  222.   info = pkt3->head;
  223.   while(info) {
  224.     printf("\n");
  225.     if(info->tag) printf("%s",info->tag);
  226.     if(info->data) {
  227.       if(info->tag) printf(" ");
  228.       printf("%s",info->data);
  229.     }
  230.     info = info->next;
  231.   }
  232.  
  233.   return 0;
  234. }
  235.  
  236.  
  237.  
  238. int check_3msghdr (void *dummy,MHDR3 *msg3,int *error) {
  239.  
  240.   /* this "callback" function should check message header and decide
  241.    * if you want to process the message.  return 0 if so, anything
  242.    * else if not.
  243.    */
  244.  
  245.   *error = NOERR3;
  246.   return 0;
  247. }
  248.  
  249.  
  250. int main (int argc,char *argv[]) {
  251.  
  252.   int error;
  253.   char *pname = "SAMPLE.3KT";
  254.  
  255.   if(argc > 1) pname = argv[1];
  256.  
  257.   printf("\n\n\n ** \"Processed\" %ld msgs\n",
  258.          process_3pkt(NULL,pname,&error));
  259.  
  260.   if(error && error != EOP3)
  261.     error3a(error);
  262.  
  263.   return error;
  264. }
  265.